cufflinks: 让pandas拥有plotly的炫酷的动态可视化能力
plotly是一款强大的基于javascript的可视化库,包括但不限于以下优点:
可开发web版可视化界面
相比matplotlib、R更加现代化
支持3D可视化绘图
有强大丰富的多语言生态,支持python、R、matlab、Jupyter、Excel
与pandas可无缝衔接
pandas和plotly我们之前都分享过,但是plotly与pandas都这么优秀好用,而且还可以无缝衔接使用,这么重要的技巧没有分享是个遗憾。所以今天准备把刚学到的分享给大家。
粗暴的衔接
如果没有多了解无缝衔接,可能代码类似于下面这样,代码量虽然不少但也实现了炫酷的效果。这里就用比较简单的折线图为例
from plotly.offline import init_notebook_mode, iplot, plot
import plotly.graph_objs as go
import pandas as pd
import numpy as np
#在notebook中需要初始化,py文件中不用
init_notebook_mode()
#产生500个数据点
N = 500
x = np.linspace(0, 1, N)#从0到1,产生500个数据点
y = np.random.randn(N)
df = pd.DataFrame({'x': x,
'y': y})
data = [
go.Scatter(x = df['x'],
y = df['y'])
]
#在py文件中使用 plot(data)
iplot(data)
无缝衔接外挂库-cufflinks
开始之前我们需要先安装cufflinks库,该库可以很方便的生成实验数据,而且最吸引人的是可以让pandas真正实现无缝衔接plotly,在pandas语法中使用plotly的功能。但要注意目前cufflinks的支持仅限于jupyter notebook,在其他IDLE中无法使用。
!pip3 install cufflinks
我们先看个简单的例子,再详细讲解cufflinks的常用功能。
import plotly.plotly as py
import cufflinks as cf
#初始化,使用plotly离线绘图功能
cf.set_config_file(offline=True)
#生成dataframe类实验数据
df = cf.datagen.scatter(n_categories=2)
#查看数据类型
print(type(df))
#在dataframe类上使用iplot方法
#散点图,模式为“标记点+折现”
df.iplot(kind='scatter', mode='markers+lines')
运行
<class 'pandas.core.frame.DataFrame'>
从上面的例子中我们直接在dataframe类型上使用plotly的绘图方法iplot。下面我们详细讲解上面涉及到的一些模块,如生成实验数据、绘图、自定义绘图等
生成实验数据
学习pandas等数据分析包的时候往往需要准备各种各样的数据集,或者使用一些数据生成包,cufflinks库可以帮助我们快速生成所需要的数据,不会因为纠结数据而耽误pandas的学习。
cufflinks.datagen是cufflinks封装好的生成pandas数据的模块,里面包含常见的如bar、pie、scatter、ohlc(美国折线图数据)等。使用前可以先使用help函数查看每种方法的文档
import cufflinks as cf
help(cf.datagen.scatter)
运行
Help on function scatter in module cufflinks.datagen:
scatter(n_categories=5, n=10, prefix='category', mode=None)
Returns a DataFrame with the required format for
a scatter plot
Parameters:
-----------
n_categories : int
Number of categories
n : int
Number of points for each category
prefix : string
Name for each category
mode : string
Format for each item
'abc' for alphabet columns
'stocks' for random stock names
现在我们生成数据
import cufflinks as cf
#生成散点图数据。三类,每类10个数据点
df = cf.datagen.scatter(n_categories=3,
n = 10)
print(len(df))
#仅随机显示5行
df.sample(5)
Run
30
我们也可以自定义数据源,如定义好数据的字段名和长度。如果对讲解过程中的方法参数不懂,可以使用help函数,如 help(cf.datagen.lines)
#3条轨迹,每个轨迹的名字分别为one、two、three,每个轨迹拥有10个数据点
cf.datagen.lines(n_traces=3,
columns=['one', 'two', 'three'],
n = 10)
自定义图主题样式
cufflinks为我们提供了丰富的主题样式,使用cufflinks.getThemes()可以得到当前cufflinks支持的所有主题
import cufflinks as cf
cf.getThemes()
Run
['ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans']
上面的运行结果表明目前cufflinks支持包括polar、pearl、henanigans、solar、ggplot、space和white等7种主题。
import plotly.plotly as py
import cufflinks as cf
#初始化,主题是space
cf.set_config_file(offline=True,
theme='space')
df = cf.datagen.scatter(n_categories=2)
df.iplot(kind='scatter', mode='markers+lines')
import plotly.plotly as py
import cufflinks as cf
#初始化,主题是space
cf.set_config_file(offline=True,
theme='white')
df = cf.datagen.scatter(n_categories=2)
df.iplot(kind='scatter', mode='markers+lines')
自定义绘图
cufflinks绘图函数df.iplot参数很多,我们讲解常用的一些参数
kind: 图的种类,如scatter、pie、bar、spread等
mode: lines、markers、lines+markers,分别表示折线、点、折线和点
colors: 轨迹对应的颜色
dash:轨迹对应的虚实线,solid、dash、dashdot三种
width:轨迹的粗细
xTitle:横坐标名称
yTitle: 纵坐标的名称
title: 图表的标题
下面我们看一个例子
import plotly.plotly as py
import cufflinks as cf
import pandas as pd
#初始化
cf.set_config_file(offline=True)
df = cf.datagen.lines(n_traces=3,
columns=['A', 'B', 'C'])
colors = ['yellow', 'purple', 'green']
dashes = ['dash', 'solid', 'dashdot']
widths = [3, 4, 6]
df.iplot(kind='scatter',
mode='lines',
colors=colors,
dash = dashes,
width=widths,
xTitle='日期',
yTitle='涨跌比率%',
title='股价涨跌图')
一行作图
上面的例子都是使用十几行做图,实际上cufflinks可以只用一行就能做出很酷的图表
cf.datagen.bubble(prefix='industry').iplot(kind='bubble',x='x',y='y',size='size',categories='categories',text='text',
xTitle='Returns',yTitle='Analyst Score',title='Cufflinks - Bubble Chart')
cf.datagen.heatmap(20,20).iplot(kind='heatmap',colorscale='spectral',title='Cufflinks - Heatmap')
从上面的例子中会发现cufflinks非常简单易用,大家如果对此感兴趣,可以关注cufflinks项目 https://github.com/santosjorge/cufflinks
推荐阅读
大神kennethreitz写出requests-html号称为人设计的解析库
如果想要获取更多例子,可以关注本公众号,
后台回复'20190505'获得本教程及扩展教程的notebook代码下载方式